home *** CD-ROM | disk | FTP | other *** search
/ CD Exchange / CD Exchange - Volume 1.iso / d.t.p / utils / others / pcal / pcallang.h < prev    next >
C/C++ Source or Header  |  1992-02-21  |  35KB  |  992 lines

  1. /*
  2.  * pcallang.h - language-dependent strings (month and day names, option file 
  3.  * keywords, preprocessor tokens, prepositions, etc.):
  4.  *
  5.  * Revision history:
  6.  *
  7.  *    4.3    AWR    12/03/91    support -s flag (override default
  8.  *                    shading of dates and fill boxes)
  9.  *
  10.  *            10/17/91    support -Z flag to generate debugging
  11.  *                    information
  12.  *
  13.  *    4.2    AWR    10/08/91    support -[kK] flags (select position
  14.  *                    of small calendars
  15.  *
  16.  *            10/03/91    support "note/<n>" (new message only)
  17.  *
  18.  *                    support -S flag (no small calendars)
  19.  *
  20.  *            10/02/91    support -N flag (user-specified notes
  21.  *                    heading)
  22.  *
  23.  *                    change message for -n to reflect
  24.  *                    optional notes font size
  25.  *
  26.  *            09/30/91    support "if" (synonym for "ifdef") and
  27.  *                    "elif" in date file
  28.  *
  29.  *            09/19/91    support -c flag (generate input file
  30.  *                    suitable for use with Un*x "calendar"
  31.  *                    utility and Pcal)
  32.  *
  33.  *                    support "elif" in "if{n}def" block
  34.  *
  35.  *    4.11    AWR    08/20/91    support "nearest" keyword as per
  36.  *                    Andy Fyfe
  37.  *
  38.  *                    changed MIN_ORD_LEN from 3 to 4 (to
  39.  *                    distinguish "even" from "every")
  40.  *
  41.  *                    add ABBR_DAY_LEN and ABBR_MONTH_LEN
  42.  *                    (cf. writefil.c) for length of
  43.  *                    abbreviated day/month names
  44.  *
  45.  *                    document %u and %w formats and number
  46.  *                    following %[+-] (cf. writefil.c)
  47.  *
  48.  *                    add DEF_WHOLE_YEAR (predefined when
  49.  *                    -w flag specified - cf. pcal.c)
  50.  *
  51.  *    4.1    AWR    08/16/91    support -G flag (outlined gray)
  52.  *
  53.  *    4.02    AWR    07/02/91    support -v flag (version number);
  54.  *                    add ordinal_suffix(); add format
  55.  *                    specifiers to help message
  56.  *
  57.  *    4.0    AWR    03/01/91    expand parameter message to explain
  58.  *                    parameter meaning when -w specified
  59.  *
  60.  *        AWR    02/19/91    revise ordinal definitions for
  61.  *                    support of negative ordinals
  62.  *
  63.  *        AWR    02/06/91    add text describing expression syntax
  64.  *
  65.  *        AWR    02/04/91    support "odd" and "even" ordinals
  66.  *
  67.  *        AWR    01/28/91    support -B (blank fill squares) flag
  68.  *                    and -O (outline "gray" dates) flag
  69.  *
  70.  *        AWR    01/16/91    added moon file support (tokens, help
  71.  *                    file text, error messages); define
  72.  *                    note block heading here
  73.  *
  74.  *        AWR    01/07/91    added support for -w (whole year) flag
  75.  *
  76.  *    3.0    AWR    12/10/90    added support for "workday", "weekday",
  77.  *                    "holiday", et. al.
  78.  *
  79.  *        AWR    11/15/90    extracted from pcal.c; revised
  80.  *                    to contain all language-dependent
  81.  *                    strings
  82.  */
  83.  
  84. #define ALL    "all"        /* command-line or date file keyword */
  85.  
  86. #ifdef MAIN_MODULE
  87.  
  88. char *months[12] = {
  89.     "January", "February", "March", "April", "May", "June",
  90.     "July", "August", "September", "October", "November", "December"
  91.     };
  92.  
  93. /* Must be a 2-D array so address within may be used as an initializer;
  94.  * wildcard names must be in same order as symbolic names in pcaldefs.h
  95.  */
  96. char days[14][12] = {
  97.         "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
  98.         "Saturday",         /* weekday names */
  99.     "day", "weekday", "workday", "holiday", "nonweekday", "nonworkday",
  100.     "nonholiday"        /* wildcards */
  101.     };
  102.  
  103. /* preprocessor tokens: token name, token code, dispatch routine; note that
  104.  * substring "if" must follow "ifdef" and "ifndef" for proper matching
  105.  */
  106.  
  107. KWD_F pp_info[] = {
  108.     "define",    PP_DEFINE,    do_define,
  109.     "elif",        PP_ELIF,    do_ifdef,
  110.     "else",        PP_ELSE,    NULL,
  111.     "endif",    PP_ENDIF,    NULL,
  112.     "ifdef",    PP_IFDEF,    do_ifdef,
  113.     "ifndef",    PP_IFNDEF,    do_ifndef,
  114.     "if",        PP_IFDEF,    do_ifdef,    /* "ifdef" synonym */
  115.     "include",    PP_INCLUDE,    NULL,        /* do_include */
  116.     "undef",    PP_UNDEF,    do_undef,
  117.     NULL,        PP_OTHER,    NULL };        /* must be last */
  118.  
  119. /* ordinal numbers - e.g. "first Monday in September": ordinal name,
  120.  * ordinal code, ordinal value; note that "all" is parsed as a keyword
  121.  * and (depending on context) may be subsequently treated as an ordinal
  122.  */
  123.  
  124. KWD_O ordinals[] = {
  125.     "first",    ORD_POSNUM,     1,
  126.     "second",    ORD_POSNUM,     2,
  127.     "third",    ORD_POSNUM,     3,
  128.     "fourth",    ORD_POSNUM,     4,
  129.     "fifth",    ORD_POSNUM,     5,
  130.     "last",        ORD_NEGNUM,    -1,
  131.     "odd",        ORD_ODD,     0,
  132.     "even",        ORD_EVEN,     0,
  133.     NULL,        ORD_OTHER,     0 };        /* must be last */
  134.  
  135. /* allowable suffixes for ordinal numbers - these must be in order 0, 1, 2...
  136.  * according to the rules of the target language; cf. ordinal_suffix() below
  137.  */
  138.  
  139. char *ord_suffix[] = { "th", "st", "nd", "rd", NULL };
  140.  
  141. /* prepositions - e.g., "Friday after fourth Thursday in November" */
  142.  
  143. KWD preps[] = {
  144.     "before",    PR_BEFORE,
  145.     "preceding",    PR_BEFORE,
  146.     "on_or_before",    PR_ON_BEFORE,
  147.     "oob",        PR_ON_BEFORE,
  148.     "after",    PR_AFTER,
  149.     "following",    PR_AFTER,
  150.     "on_or_after",    PR_ON_AFTER,
  151.     "ooa",        PR_ON_AFTER,
  152.     "nearest",    PR_NEAREST,
  153.     NULL,        PR_OTHER };    /* must be last */
  154.  
  155. /* other keywords */
  156.  
  157. KWD keywds[] = {
  158.     ALL,         DT_ALL,
  159.     "each",        DT_ALL,
  160.     "every",    DT_ALL,
  161.     "note",        DT_NOTE,
  162.     "opt",        DT_OPT,
  163.     "year",        DT_YEAR,
  164.     NULL,        DT_OTHER };    /* must be last */
  165.  
  166. /* moon phases (for moon file) */
  167.  
  168. KWD phases[] = {
  169.     "new_moon",    MOON_NM,    /* new moon */
  170.     "nm",        MOON_NM,    
  171.     "first_quarter",MOON_1Q,    /* first quarter */    
  172.     "1Q",        MOON_1Q,    
  173.     "FQ",        MOON_1Q,    
  174.     "full_moon",    MOON_FM,    /* full moon */
  175.     "FM",        MOON_FM,    
  176.     "last_quarter",    MOON_3Q,    /* last (third) quarter */
  177.     "LQ",        MOON_3Q,
  178.     "third_quarter",MOON_3Q,
  179.     "3Q",        MOON_3Q,
  180.     NULL,        MOON_OTHER };    /* must be last */
  181.  
  182. /* default notes box header */
  183.  
  184. char default_notes_hdr[] = "Notes";
  185.  
  186. #else
  187. extern char *months[];
  188. extern char days[14][12];
  189. extern KWD_F pp_info[];
  190. extern KWD preps[];
  191. extern KWD_O ordinals[];
  192. extern char *ord_suffix[];
  193. extern KWD keywds[];
  194. extern KWD phases[];
  195. extern char default_notes_hdr[];
  196. #endif
  197.  
  198. /* minimum size of abbreviations - adjust as appropriate for target language */
  199.  
  200. #define MIN_DAY_LEN    3    /* distinguish "Thursday" from "third" */
  201. #define ABBR_DAY_LEN    3    /* length of abbreviated day names */
  202. #define MIN_MONTH_LEN    3
  203. #define ABBR_MONTH_LEN    3    /* length of abbreviated month names */
  204. #define MIN_PPTOK_LEN    3
  205. #define MIN_PREP_LEN    7    /* distinguish "on_or_before", "on_or_after" */
  206. #define MIN_ORD_LEN    4    /* distinguish "every" from "even" */
  207.  
  208.  
  209. /*
  210.  * Symbolic names for command-line flags.  These may be changed
  211.  * as desired in order to be meaningful in languages other than
  212.  * English.
  213.  */
  214.  
  215. #define F_INITIALIZE    'I'        /* re-initialize program defaults */
  216. #define    F_BLACK_DAY    'b'        /* print day in black */
  217. #define F_GRAY_DAY    'g'        /* print day in gray */
  218.  
  219. #define F_DAY_FONT    'd'        /* select alternate day font */
  220. #define F_NOTES_FONT    'n'        /* select alternate notes font */
  221. #define F_TITLE_FONT    't'        /* select alternate title font */
  222.  
  223. #define F_EMPTY_CAL    'e'        /* print empty calendar */
  224. #define F_DATE_FILE    'f'        /* select alternate date file */
  225. #define F_OUT_FILE    'o'        /* select alternate output file */
  226.  
  227. #define F_LANDSCAPE    'l'        /* landscape mode */
  228. #define F_PORTRAIT    'p'        /* portrait mode */
  229.  
  230. #define F_HELP        'h'        /* generate full help message */
  231. #define F_USAGE        'u'        /* generate parameter usage message */
  232. #define F_VERSION    'v'        /* generate version ID */
  233.  
  234. #define F_MOON_4    'm'        /* print new/half/full moons */
  235. #define F_MOON_ALL    'M'        /* print all moons */
  236.  
  237. #define F_DEFINE    'D'        /* define preprocessor symbol */
  238. #define F_UNDEF        'U'        /* undefine preprocessor symbol */
  239.  
  240. #define F_L_FOOT    'L'        /* define left foot string */
  241. #define F_C_FOOT    'C'        /* define center foot string */
  242. #define F_R_FOOT    'R'        /* define right foot string */
  243.  
  244. #define F_NOTES_HDR    'N'        /* define heading for notes box */
  245.  
  246. #define F_FIRST_DAY    'F'        /* define alternate starting day */
  247.  
  248. #define F_USA_DATES    'A'        /* parse American date format */
  249. #define F_EUR_DATES    'E'        /* parse European date format */
  250.  
  251. #define F_X_TRANS    'X'        /* X-axis transformation */
  252. #define F_Y_TRANS    'Y'        /* Y-axis transformation */
  253. #define F_X_SCALE    'x'        /* X-axis scale factor */
  254. #define F_Y_SCALE    'y'        /* Y-axis scale factor */
  255.  
  256. #define F_JULIAN    'j'        /* print Julian day (day of year) */
  257. #define F_JULIAN_ALL    'J'        /* print Julian day and days left */
  258.  
  259. #define F_WHOLE_YEAR    'w'        /* print whole year per page */
  260.                     /* (cf. W_WYFLAG below) */
  261.  
  262. #define F_BLANK_BOXES    'B'        /* don't fill unused boxes */
  263.  
  264. #define F_SC_NONE    'S'        /* suppress small calendars */
  265. #define F_SC_FIRST    'k'        /* prev/next in first two boxes */
  266. #define F_SC_SPLIT    'K'        /* split between first and last boxes */
  267.  
  268. #define F_OUTLINE_GRAY    'G'        /* outline and fill "gray" dates */
  269. #define F_OUTLINE    'O'        /* draw "gray" dates as outlines */
  270.  
  271. #defi